/*
 * 负责控制文件上传组件
 */
$(function() {
	$.suredy = $.extend({}, $.suredy);

	var template = '<div class="form-group item">\
						<div class="input-group">\
							<div class="input-group-addon">\
								<div class="form-item-title">附件资料</div>\
							</div>\
							<input type="file" name="file" class="hidden" data-suffix=".rar, .zip">\
							<input type="text" class="form-control form-data file-show" placeholder="请选择附件资料。格式只能是[.rar, .zip]中的一个！" readonly="readonly">\
							<div class="btn input-group-addon file-remove">\
								<i class="icon-remove text-danger"></i>\
							</div>\
						</div>\
					</div>';

	$.suredy.file = {
		init : function(t) {
			if (!t || !('string' === typeof t))
				return;

			template = t;
		}
	};

	// 判断文件后缀是否匹配
	var fileTypeChecker = function($file, s) {
		if (!$file || !s)
			return true;

		var suffixes = s.trim().replace(/\s/g, '').split(',');

		// 没有限制的时候直接通过
		if (suffixes.length <= 0)
			return true;

		var fileName = $file.val();

		// 为选择文件，直接不校验
		if (fileName === '')
			return true;

		// 没有后缀直接不通过
		if (fileName.lastIndexOf('\.') === -1)
			return false;

		var suffix = fileName.substr(fileName.lastIndexOf('\.'));

		for (i in suffixes) {
			if (suffix === suffixes[i])
				return true;
		}

		return false;
	};

	// 上传文件
	$('body').on('click', 'input.file-show', function() {
		var $this = $(this);

		$('input[type=file]', $this.parent()).trigger('click');
	});

	// 删除选择的文件（只有.file-items下的.item才能删除）
	$('body').on('click', '.file-remove', function() {
		var $this = $(this);
		var item = $this.parents('.item');

		// 文件为空的时候不进行删除
		if (!$('.file-show', item).val())
			return false;

		item.remove();
	});

	// 文件控件控制
	$('body').on('change', 'input[type="file"]', function() {
		var $this = $(this);

		var val = $this.val();

		if (val)
			val = val.substr(val.lastIndexOf('\\') + 1);

		$('input.file-show', $this.parent()).val(val).trigger('change');

		// 判断文件格式
		var suffix = $this.data('suffix');
		if (!fileTypeChecker($this, suffix)) {
			// 清除已经选择的数据
			$this.val('');
			$('input.file-show', $this.parent()).val('');

			alert('文件选择失败！\n\n选择的文件格式必须是[ ' + suffix + ' ]中的一个！');
		}

		// 清除没有文件的组件
		$('.file-items input.file-show').each(function(i) {
			var $this = $(this);

			if (!$this.val())
				$this.parents('.item').remove();
		});

		// 增加一个待选择节点
		$('.file-items').append(template);
	});

});